Sinewave Shotgun
#Shader_Music #オシレータ #シンセ
ハイハットやシンバル等の音が出るオシレータ
不協和音ショットガン
完全プロシージャル
TR-808のハイハット・Oidosから着想を得た
TR-808のハイハットは、Metallic Noiseと呼ばれる、矩形波オシレータ6本+BPFで実現しているが、
GLSLでは当然フィルターなんて実装できないので、
代わりに大量のサイン波を用いて不協和音をばら撒き、それっぽいハイハット音を作り出す
サイン波を大量に生成しなければならない都合上、CPUでの生成はやや不適
ステートを持ってBiquad Filterが作れるんであれば、TR-808のアプローチのほうがいいはず
code:glsl
vec2 shotgun( float t, float spread, float snap ) {
vec2 sum = vec2( 0.0 );
for ( int i = 0; i < 64; i ++ ) {
vec3 dice = pcg3df( vec3( i ) );
float partial = exp2( spread * dice.x );
partial = mix( partial, floor( partial + 0.5 ), snap );
sum += vec2( sin( TAU * t * partial ) ) * rotate2D( TAU * dice.y );
}
return sum / 64.0;
}
pcg3df はpcg3dをfloat vec3で入出力できるようにしたもの
要はseeded randomが作れれば良い
サイン波をFM変調させてもいい音が鳴る
snap というパラメータを上げていくと、ばら撒かれた不協和音が整数倍に近づき、整った音に近づく
これはRazorから着想を得た
Dittytoy
Dittytoy上でキックと一緒に鳴らしました
Sine with recurrence formulaを使えばCPUでも現実的な計算負荷で実現可能
https://dittytoy.net/ditty/1adb91fe55